<?php

namespace App\Models\Game\Config;

use App\Models\Game\Model;
use App\Models\Traits\Game\LogsActivity;

class System extends Model
{
    use LogsActivity;

    /**
     * 数据表名称
     *
     * @var string
     */
    protected $table = 't_config_system';

    /**
     * 不可批量赋值的字段
     *
     * @var array
     */
    protected $guarded = [];

    /**
     * 进行类型转换的字段
     *
     * @var array
     */
    protected $casts = [
        'info' => 'array',
    ];

    /**
     * 游戏服接口token
     */
    const TYPE_GM_TOKEN = 10;

    /**
     * 游戏域名
     */
    const TYPE_GAME_DOMAIN = 70;

    /**
     * 全服开关
     */
    const TYPE_SERVER_FULL = 80;

    /**
     * 关闭游戏
     */
    const TYPE_SERVER_GAME = 81;

    /**
     * 关闭平台
     */
    const TYPE_SERVER_PLATFORM = 82;

    /**
     * 开启状态（关闭）
     */
    const ENABLE_OFF = 0;

    /**
     * 开启状态（开启）
     */
    const ENABLE_ON = 1;

    /**
     * 查询一条数据
     *
     * @param int $type
     * @return \Illuminate\Database\Eloquent\Model
     */
    protected function findByType($type)
    {
        return $this->newQuery()
            ->where('type', $type)
            ->first();
    }

    /**
     * 更新或创建一条数据
     *
     * @param int $type
     * @param array $info
     * @return \Illuminate\Database\Eloquent\Model
     */
    protected function updateOrCreateByType($type, array $info = [])
    {
        return $this->newQuery()->updateOrCreate([
            'type' => $type,
        ], [
            'info' => $info,
        ]);
    }

    /**
     * 获取域名
     *
     * @return array
     */
    protected function getDomain()
    {
        $config = $this->newQuery()
            ->where('type', self::TYPE_GAME_DOMAIN)
            ->first();

        $info = $config->info ?? null;

        $domain = [
            'agency' => rtrim(config('app.domain.agency'), '/'),
            'info' => $info, 'client' => '',
        ];

        // 制作域名【client】
        if (isset($info['cdnClientDomain'][0])) {
            // 解析地址
            $params = parse_url($info['cdnClientDomain'][0]);
            // 域名拼接
            $domain['client'] = $params['scheme'] . '://' . $params['host'];
            // 端口
            $domain['client'] .= !empty($params['port']) ? ":{$params['port']}" : '';
        }

        return $domain;
    }
}
